package cn.iocoder.yudao.module.system.dal.mysql.social;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 社会用户绑定映射器
 *
 * @author huangweidong
 * @date 2023/05/09
 */
@Mapper
public interface SocialUserBindMapper extends BaseMapperX<SocialUserBindDO> {

    /**
     * 删除通过用户类型和用户id和社会类型
     *
     * @param userType   用户类型
     * @param userId     用户id
     * @param socialType 社会类型
     */
    default void deleteByUserTypeAndUserIdAndSocialType(Integer userType, Long userId, Integer socialType) {
        delete(new LambdaQueryWrapperX<SocialUserBindDO>()
                .eq(SocialUserBindDO::getUserType, userType)
                .eq(SocialUserBindDO::getUserId, userId)
                .eq(SocialUserBindDO::getSocialType, socialType));
    }

    /**
     * 删除通过用户类型和社会用户id
     *
     * @param userType     用户类型
     * @param socialUserId 社会用户id
     */
    default void deleteByUserTypeAndSocialUserId(Integer userType, Long socialUserId) {
        delete(new LambdaQueryWrapperX<SocialUserBindDO>()
                .eq(SocialUserBindDO::getUserType, userType)
                .eq(SocialUserBindDO::getSocialUserId, socialUserId));
    }

    /**
     * 查询通过用户类型和社会用户id
     *
     * @param userType     用户类型
     * @param socialUserId 社会用户id
     * @return {@code SocialUserBindDO}
     */
    default SocialUserBindDO selectByUserTypeAndSocialUserId(Integer userType, Long socialUserId) {
        return selectOne(SocialUserBindDO::getUserType, userType,
                SocialUserBindDO::getSocialUserId, socialUserId);
    }

    /**
     * 查询列表通过用户id和用户类型
     *
     * @param userId   用户id
     * @param userType 用户类型
     * @return {@code List<SocialUserBindDO>}
     */
    default List<SocialUserBindDO> selectListByUserIdAndUserType(Long userId, Integer userType) {
        return selectList(new LambdaQueryWrapperX<SocialUserBindDO>()
                .eq(SocialUserBindDO::getUserId, userId)
                .eq(SocialUserBindDO::getUserType, userType));
    }

}
